iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0

今天要來複習之前有實作過的Future,在最後要等待開啟鏈結的時候有使用到,它可以用來實現異步操作,異步操作可以在程式執行時,不用等待某一個操作完成,就可以繼續執行其他操作。接著來看一些Future的範例!

  • 異步操作:
    會先執行print('Orange');,再執行異步的程式print('Apple');
    https://ithelp.ithome.com.tw/upload/images/20231010/20163063laTqhx68XJ.png
  • 加上async和await:
    之前有提到的兩個關鍵字,使用async來定義異步函數,await則是會先等待Future完成並獲取結果才繼續執行,await只有在異步函數中才能使用!這裡加上後就會先等待print('Apple');執行完,再繼續執行print('Orange');
    https://ithelp.ithome.com.tw/upload/images/20231010/20163063cakgMWLHJ4.png
  • Future
    Future<T>實例會返回類型T的值,如果Future不會返回任何值,則Future的類型為Future<void>,Future可以是未完成或已完成兩種狀態。接著看範例:
    • getYear()會延遲5秒,所以會先print('Date:')
      https://ithelp.ithome.com.tw/upload/images/20231010/20163063iE180mdCY1.png
    • 使用await就會等待getNumber()回傳月份才會繼續執行getMonth()後面的程式
      https://ithelp.ithome.com.tw/upload/images/20231010/20163063sky46At9aP.png
      (這裡將12、14行對調,也會變成要先等月份印出之後才會繼續印出年和Date字串)
      https://ithelp.ithome.com.tw/upload/images/20231010/20163063K5CqdCRdb4.png
  • Error handling
    處理錯誤有兩種方式:
    • try catch
      https://ithelp.ithome.com.tw/upload/images/20231010/20163063VJRSTtwQIK.png
    • catchError、whenComplete、then():
      • catchError:異步操作失敗時執行
      • then():異步操作完成時執行
      • whenComplete:不管異步操作成功/失敗都會執行
        https://ithelp.ithome.com.tw/upload/images/20231010/20163063pOAvqb9Kxs.png

參考資料:
https://medium.com/learn-and-live/%E9%80%B2%E5%85%A5dart%E7%9A%84%E4%B8%96%E7%95%8C-64266d782d5f


上一篇
Day24 [Flutter] 頁面轉換
下一篇
Day26 [Flutter] SQLite( 1 )
系列文
用30天學習做出我的第一個Flutter App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言